//
//  HDAppPayManager.h
//  HaiDiProject
//
//  Created by Dxc_iOS on 2018/3/9.
//  Copyright © 2018年 XinMiao. All rights reserved.
/*
 内购的流程：
 1.点击充值,发起预订单 ：用户点击立即充值,发起充值流程,请求自己服务器,生成预订单 ，生成的预订单给客户端保存本地.(为了服务端验证防止刷单,本地绑定预订单处理漏单需要)；
 2.客户端请求到订单号后 开始向苹果支付（先向appstore请求商品信息，然后付款）调起内购,绑定预订单:(存储模型:产品id,预订单,交易状态,充值状态,时间戳+产品id)；
 3.付款成功后appstore会给客户端返回 一个验证信息（用来验证是否合法）；
 4.客户端将订单号和验证信息发给服务器；
 5.服务器向appstore验证是支付是否合法(来判断是否给用户加商品)；
 

 */
/*注意事项：
 1.沙盒环境测试appStore内购流程的时候，请使用没越狱的设备。
 2.请务必使用真机来测试，一切以真机为准。
 3.项目的Bundle identifier需要与您申请AppID时填写的bundleID一致，不然会无法请求到商品信息。
 4.如果是你自己的设备上已经绑定了自己的AppleID账号请先注销掉,否则你哭爹喊娘都不知道是怎么回事。
 5.订单校验 苹果审核app时，仍然在沙盒环境下测试，所以需要先进行正式环境验证，如果发现是沙盒环境则转到沙盒验证。
 识别沙盒环境订单方法：
 1.根据字段 environment = sandbox。
 2.根据验证接口返回的状态码,如果status=21007，则表示当前为沙盒环境。
 苹果反馈的状态码：
 21000App Store无法读取你提供的JSON数据
 21002 订单数据不符合格式
 21003 订单无法被验证
 21004 你提供的共享密钥和账户的共享密钥不一致
 21005 订单服务器当前不可用
 21006 订单是有效的，但订阅服务已经过期。当收到这个信息时，解码后的收据信息也包含在返回内容中
 21007 订单信息是测试用（sandbox），但却被发送到产品环境中验证
 21008 订单信息是产品环境中使用，但却被发送到测试环境中验证
 */
#import <Foundation/Foundation.h>

#import <StoreKit/StoreKit.h>
typedef enum {
    IAPPurchSuccess = 0,       // 购买成功
    IAPPurchFailed = 1,        // 购买失败
    IAPPurchCancle = 2,        // 取消购买
    IAPPurchVerFailed = 3,     // 订单校验失败
    IAPPurchVerSuccess = 4,    // 订单校验成功
    IAPPurchNotArrow = 5,      // 不允许内购
}IAPPurchType;

typedef void (^IAPCompletionHandle)(IAPPurchType type,NSData *data);

@interface IPAManager : NSObject
//内购管理者-单例类
+ (instancetype)shareSIAPManager;

/**
 开始内购

 @param purchID 内购商品ID(必须和ITunes Connect提交的商品ID保持一致)
 @param moneyID 商品价格ID
 @param handle 内购成功与否的处理
 */
- (void)startPurchWithID:(NSString *)purchID moneyID:(NSString *)moneyID completeHandle:(IAPCompletionHandle)handle;

@end
